package mego

import "fmt"

//备忘录模式
type Memento interface{}

type Game struct {
	hp, mp int
}
type gameMemento struct {
	hp, mp int
}

func (g *Game) Play(mpDelta, hpDelta int) {
	g.mp += mpDelta
	g.hp += hpDelta
}
func (g *Game) Save() Memento {
	return &gameMemento{
		hp: g.hp,
		mp: g.mp,
	}
}

//加载到 内存中
// 外部不允许 Game 一个对象
// 彩笔
// 尼玛死了
// 垃圾
func (g *Game) Load(m Memento) {
	gm := m.(*gameMemento)
	g.mp = gm.mp
	g.hp = gm.hp
}
func (g *Game) Status() {
	fmt.Printf("Current HP: %d, Mp: %d\n", g.hp, g.mp)
}

//这种分离的方法
type Fenli interface{}

type F struct {
	state int
	token string
}

func (f *F) StateGoload(state int, token string) {
	f.state = state
	f.token = token
}

//分离
func (f *F) Save() Fenli {
	return &F2{
		state: f.state,
		token: f.token,
	}
}

type F2 struct {
	state int
	token string
}

func (f *F) Load(m Fenli) {
	g := m.(*F2)
	f.token = g.token
	f.state = g.state
}
